﻿#ifndef __AF_PLATFORM_H__
#define __AF_PLATFORM_H__

#include "AF_Define.h"

namespace AF
{
	class Platform;
}
typedef AF::Platform			AF_CPlatform;

#include "AF_Application.h"
#include "AF_Window.h"
#include "AF_Event.h"
#include "AF_Canvas.h"
#include "AF_Package.h"
#include "AF_Audio.h"

namespace AF
{
	/// 图像引擎平台接口基类
	class _ABSTRACT Platform
	{
	public:
		Platform(){}
		virtual ~Platform(){}

	public:
		// 平台函数
		/**
		 *  @name 平台函数
		 */

		/// 初始化图像引擎平台
		virtual bool			InitPlatform(AF_CBundle* pParam = NULL) = 0;
		/// 卸载图像引擎平台
		virtual bool			DestroyPlatform() = 0;


		// 窗口函数
		/**
		 *  @name 窗口函数
		 */

		/// 创建窗口
		virtual AF_DWindowHandle	NewWindow(AF_SCreateWindow& cw) = 0;
		/// 显示窗口
		virtual	bool			ShowWindow(AF_DWindowHandle pWndHand) = 0;
		/// 隐藏窗口
		virtual bool			HideWindow(AF_DWindowHandle pWndHand) = 0;
		/// 翻转窗口
		virtual void			FlipWindow(AF_DWindowHandle pWndHand) = 0;
		/// 销毁窗口
		virtual bool			DeleteWindow(AF_DWindowHandle pWndHand) = 0;
		/// 设置窗口标题
		virtual void			SetWindowTitle(AF_DWindowHandle pWndHand, _STRING strTitle)
						{return;}

		// 事件函数
		/**
		 *  @name 事件函数
		 */

		/// 获得事件
		virtual bool			GetEvent(AF_DWindowHandle pWndHandle, AF_SEvent& event) = 0;
		/// 清除事件缓冲
		virtual void			CleanEventBuffer(AF_DWindowHandle pWndHandle) = 0;


		// 画布函数
		/**
		 *  @name 画布函数
		 */

		/// 创建画布
		virtual AF_CCanvas*		CreateCanvas(AF_DWindowHandle pWndHand) = 0;
		/// 销毁画布
		virtual bool			DeleteCanvas(AF_CCanvas* pCanvas) = 0;


		// 图像函数
		/**
		 *  @name 图像函数
		 */

		/// 加载图像
		virtual AF_DImageHandle		CreateImage(
							const _STRING strPathName,
							UINT& _OUT nWidth,
							UINT& _OUT nHeight,
							ImageInfo& _OUT ii
						) = 0;
		/// 加载图像
		virtual AF_DImageHandle		CreateImage(
							const void* pData,
							const size_t nSize,
							UINT& _OUT nWidth,
							UINT& _OUT nHeight,
							ImageInfo& _OUT ii
						) = 0;
		/// 创建图像
		virtual AF_DImageHandle		CreateImage(
							const UINT nWidth,
							const UINT nHeight,
							ImageInfo& _OUT ii
						) = 0;
		/// 获取图像信息
		virtual bool			GetImageInfo(
							AF_DImageHandle hImage,
							UINT& _OUT nWidth,
							UINT& _OUT nHeight,
							ImageInfo& _OUT ii
						) = 0;
		/// 销毁图像
		virtual bool			DeleteImage(AF_DImageHandle hImage) = 0;


// 		// IO操作函数
// 		/**
// 		 *  @name IO操作函数
// 		 */


		// 其他平台功能函数
		/**
		 *  @name 其他平台功能函数
		 */
		/// 获得系统时间
		virtual AF_DTimeTicks		GetTimeTicks();
		/// 调试台输出
		virtual void			ConsoleOut(_STRING strText, bool bEnter = false);
		/// 程序睡眠
		virtual void			Delay(AF_DTimeTicks ttSleep);
	};
}

#endif